home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / libs / unixlib.lha / unix / src / unlink.c < prev    next >
C/C++ Source or Header  |  1996-01-04  |  831b  |  48 lines

  1. #include "amiga.h"
  2. #include "files.h"
  3. #include <amiga/ioctl.h>
  4.  
  5. int ioctl(int fd, int request, void *data);
  6.  
  7. static int delete_open_file(char *name)
  8. {
  9.     BPTR nlock = Lock(name, SHARED_LOCK);
  10.  
  11.     if (nlock) {
  12.     int err = errno, i;
  13.  
  14.     i = _last_fd();
  15.     while (--i >= 0)
  16.         if (ioctl(i, _AMIGA_DELETE_IF_ME, &nlock) == 0) {
  17.         errno = err;
  18.         return 0;
  19.         }
  20.     UnLock(nlock);
  21.     }
  22.     return -1;
  23. }
  24.  
  25. int unlink(const char *file)
  26. {
  27.     long err;
  28.  
  29.     __chkabort();
  30.     if (DeleteFile(file))
  31.     return 0;
  32.     err = IoErr();
  33.     if (err == ERROR_DELETE_PROTECTED) {
  34.     if (SetProtection(file, 0) && DeleteFile(file))
  35.         return 0;
  36.     err = IoErr();
  37.     }
  38.     if (err == ERROR_OBJECT_IN_USE && delete_open_file(file) == 0)
  39.     return 0;
  40.     errno = convert_oserr(err);
  41.     return -1;
  42. }
  43.  
  44. int remove(const char *file)
  45. {
  46.     return(unlink(file));
  47. }
  48.